﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace Webcam_Filter
{
    class Bluescreen : Filter
    {
        private Bitmap img;
        private byte[] rgbValuesImg;
        public Bluescreen()
        {

            img = new Bitmap("C:\\Users\\Robin\\Pictures\\test.bmp");
            System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, img.Width, img.Height);
            System.Drawing.Imaging.BitmapData bmpData =
                img.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
                img.PixelFormat);

            // het adres van de eerste lijn
            IntPtr ptr = bmpData.Scan0;

            // een array maken die groot genoeg is om alle bytes van de afbeelding in te steken
            int bytes = Math.Abs(bmpData.Stride) * img.Height;
            rgbValuesImg = new byte[bytes];

            // de RGB waarden in de array steken
            System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValuesImg, 0, bytes);

            img.UnlockBits(bmpData);
        }
        protected override void runfilter(byte[] rgbValues, int hoogte, int breedte, string[] args)
        {
            int B, G, R;
            int breedteARGB = breedte * 4;

            for (int i = 0; i < breedteARGB * hoogte / 1; i += 4)
            {
                B = rgbValues[i];
                G = rgbValues[i + 1];
                R = rgbValues[i + 2];
                // de pixels die aan de vereiste kleurvoorwaarden voldoen vervangen door de overeenkomstige pixels van de afbeelding
                if (R <= 255 && R >= 200 && G <= 115 && G >= 40 && B <= 80 && B >= 0 || R <= 200 && R >= 160 && G <= 40 && G >= 5 && B <= 20 && B >= 0 || R <= 190 && R >= 170 && G <= 80 && G >= 30 && B <= 80 && B >= 20 || R <= 255 && R >= 190 && G <= 90 && G >= 40 && B <= 50 && B >= 0)
                {
                    int i2 = (i / 4) * 3;
                    rgbValues[i] = rgbValuesImg[i2];
                    rgbValues[i + 1] = rgbValuesImg[i2 + 1];
                    rgbValues[i + 2] = rgbValuesImg[i2 + 2];
                }

            }
        }
    }
}